package com.briup.es.web.controller;

import com.briup.es.config.response.Result;
import com.briup.es.domain.vo.BookDetailVO;
import com.briup.es.domain.vo.BookVO;
import com.briup.es.service.BookService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.validation.constraints.NotBlank;
import java.util.List;

@Api(tags = "图书模块")
// 添加本注解后，就能自动在本类中进行参数校验
@Validated
@RestController
@RequestMapping("/book")
public class BookController {

    @Resource
    private BookService bookService;

    @ApiOperation("首页展示图书信息")
    @GetMapping("/showBooks")
    public Result<List<BookVO>> showBooks() {
        List<BookVO> bookVOS = bookService.showBooks();
        return Result.success(bookVOS)
                .apply("ok");
    }

    @ApiOperation("根据分类查询图书信息")
    // {id} 表示能够接收一个路径变量，该处可以是2、4、6、10等所有数字
    // 在路径上的参数需要通过@PathVariable注解获取
    @GetMapping("/findByCategory/{id}")
    public Result<List<BookVO>> findByCategory(@PathVariable Integer id) {
        // 调用Service层接口，根据分类id查询图书信息
        List<BookVO> list = bookService.findByCategory(id);
        return Result.success(list)
                .apply("获取成功");
    }

    @ApiOperation("首页搜索数据")
    @GetMapping("/searchBook")
    public Result<?> searchBook(
            @NotBlank(message = "请输入图书名称/作者/出版社的关键字") String query) {
        // 调用Service层接口，根据给定的关键字查询图书信息
        List<BookVO> list = bookService.searchBook(query);
        return Result.success(list)
                .apply("获取成功");
    }

    @ApiOperation("获取图书详情")
    @GetMapping("/{id}")
    public Result<?> queryById(@PathVariable Integer id) {
        BookDetailVO vo = bookService.queryById(id);
        return Result.success(vo)
                .apply("获取成功");
    }
}
